/*
WindowBase.hpp
--------------

Par Bréhaut Vincent le 28/02/2011

Rôle: Créer, afficher et gérer les fenêtres de la GUI
*/

#ifndef DEF_WINDOWBASE
#define DEF_WINDOWBASE

#include <iostream>
#include <SFML/Graphics.hpp>
#include <vector>
#include <lua.hpp>
#include "Button.hpp"
#include "Widget.hpp"

namespace GUI
{
    class WindowBase : public Widget
    {
        public:
            WindowBase(Engine &Moteur, const sf::String &text=sf::String(""));
            void initialize_rects();
            void initialize_GUI();
            void ActualizeWidgetsPosition();

            void SetPosition(const int x, const int y);
            void SetPositionX(const int x);
            void SetPositionY(const int y);
            void SetDimensions(const unsigned int width, const unsigned int height);

            void Adjust(); // Ajuste la taille de la fenêtre à son contenu

            void SetWidget(Widget *widget);

            virtual bool IsHover();

            virtual void UpdateEvent();
            virtual void Afficher();
        protected:
            bool m_clicked; // Le joueur a cliquer sur la fenêtre
            Dimensions m_espaces; // Espace entre la souris et l'origine de la fenêtre lors d'un clique
            std::vector<Widget*> m_widgets; // Widgets que contient la fenêtre

            //Boutons d'ouverture et fermeture de la fenêtre
            OpenButton m_bouton_ouverture;
            CloseButton m_bouton_fermeture;

            bool m_reduite; // Booléen indiquant si la fenêtre est réduite ou non

            sf::Text m_titre;
            sf::Font m_font_titre;
            sf::Color m_color_titre;
            sf::Font m_font_contenu;
            sf::Color m_color_contenu;
            int m_fontsize_titre; // Taille de la police de caractères du titre de la fenêtre
            int m_fontsize_contenu; // Taille de la police de caractères dans la fenêtre
            int m_hauteur_titre;
            // Largeur et hauteur de la fenêtre sur l'image d'id m_id_image
            int m_base_width;
            int m_base_height;
            sf::Sprite m_sprite; // Sprite de la fenêtre
            std::vector<sf::IntRect> m_rects;
    };
}

#endif
